home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / MemAllocators.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  3KB  |  125 lines

  1. /*
  2.      File:        MemAllocators.h
  3.  
  4.      Version:    Technology:    
  5.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  6.  
  7.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. */
  16. #ifndef __MEMALLOCATORS__
  17. #define __MEMALLOCATORS__
  18.  
  19. #ifndef __TYPES__
  20. #include <Types.h>
  21. #endif
  22. #ifndef __MIXEDMODE__
  23. #include <MixedMode.h>
  24. #endif
  25.  
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29.  
  30. #if PRAGMA_IMPORT_SUPPORTED
  31. #pragma import on
  32. #endif
  33.  
  34. #if PRAGMA_ALIGN_SUPPORTED
  35. #pragma options align=mac68k
  36. #endif
  37.  
  38. #if FOR_SYSTEM8_PREEMPTIVE
  39. /*
  40.  *    NOTE:  Callers of the MemAllocators API are gauranteed at least
  41.  *    kMemAllocatorAlignment_Minimum alignment of all allocated blocks.
  42. */
  43.  
  44. enum {
  45.     kMemAllocatorAlignment_Minimum = 2                            /* (4 Byte Alignment Gaurantee) */
  46. };
  47.  
  48. typedef struct OpaqueMemAllocatorRef* MemAllocatorRef;
  49. extern MemAllocatorRef    xResidentAllocator;
  50. extern MemAllocatorRef    xDefaultGlobalAllocator;
  51. extern MemAllocatorRef    xDefaultAllocator;
  52. /*
  53.  *    Handle support
  54. */
  55. extern OSStatus MemNewHandle(MemAllocatorRef inAllocator, ByteCount inSize, Handle *outHandle);
  56.  
  57. extern OSStatus MemNewHandleClear(MemAllocatorRef inAllocator, ByteCount inSize, Handle *outHandle);
  58.  
  59. extern OSStatus MemDisposeHandle(Handle *ioHandle);
  60.  
  61. extern OSStatus MemSizeHandle(ByteCount inSize, Handle inHandle);
  62.  
  63. extern OSStatus MemGetHandleSize(Handle inHandle, ByteCount *outSize);
  64.  
  65. /*
  66.  * Fixed block support
  67. */
  68. extern OSStatus MemNewFixed(MemAllocatorRef inAllocator, ByteCount inSize, void **outMemory);
  69.  
  70. extern OSStatus MemNewFixedClear(MemAllocatorRef inAllocator, ByteCount inSize, void **outMemory);
  71.  
  72. /* inAlignment must be in the range 0..31 */
  73. extern OSStatus MemNewFixedAligned(MemAllocatorRef inAllocator, ByteCount inSize, UInt32 inAlignment, void **outMemory);
  74.  
  75. /* inAlignment must be in the range 0..31 */
  76. extern OSStatus MemNewFixedAlignedClear(MemAllocatorRef inAllocator, ByteCount inSize, UInt32 inAlignment, void **outMemory);
  77.  
  78. extern OSStatus MemDisposeFixed(MemAllocatorRef inAllocator, ByteCount inSize, void **ioMemory);
  79.  
  80. /*
  81.  * Convenience macros
  82. */
  83. #define MEMALLOC( ptrPtr) \
  84.     MemNewFixed(xDefaultAllocator, sizeof(**ptrPtr), (void **)(ptrPtr))
  85. #define MEMALLOC_CLEAR(ptrPtr) \
  86.     MemNewFixedClear(xDefaultAllocator, sizeof(**ptrPtr), (void **)(ptrPtr))
  87. #define MEMFREE(ptrPtr) \
  88.     MemDisposeFixed(xDefaultAllocator, sizeof(**ptrPtr), (void **)(ptrPtr))
  89. /*
  90.  * Variable block support
  91. */
  92. extern OSStatus MemNewVariable(MemAllocatorRef inAllocator, ByteCount inSize, void **outMemory);
  93.  
  94. extern OSStatus MemNewVariableClear(MemAllocatorRef inAllocator, ByteCount inSize, void **outMemory);
  95.  
  96. extern OSStatus MemDisposeVariable(MemAllocatorRef inAllocator, void **ioMemory);
  97.  
  98. extern OSStatus MemGetVariableSize(MemAllocatorRef inAllocator, void *inMemory, ByteCount *outSize);
  99.  
  100. extern OSStatus MemSizeVariable(MemAllocatorRef inAllocator, ByteCount inSize, void **ioMemory);
  101.  
  102. /*
  103.  *    Debugging Support
  104. */
  105. extern OSStatus MemCheckAllocator(MemAllocatorRef inAllocator);
  106.  
  107. extern OSStatus MemForceFailure(MemAllocatorRef inAllocator, OSStatus inForceFailure);
  108.  
  109. #endif
  110.  
  111. #if PRAGMA_ALIGN_SUPPORTED
  112. #pragma options align=reset
  113. #endif
  114.  
  115. #if PRAGMA_IMPORT_SUPPORTED
  116. #pragma import off
  117. #endif
  118.  
  119. #ifdef __cplusplus
  120. }
  121. #endif
  122.  
  123. #endif /* __MEMALLOCATORS__ */
  124.  
  125.